/*
 * Logger.h
 *
 *   Created on: 2010-3-29     
 *  Description: 日志系统(记录到文件)
 *    Copyright: 2010 @ ICT Li Heyuan
 */

#ifndef LOGGER_H_
#define LOGGER_H_

#define LOG_MSG_MAX 2048

#include <string>
#include <fstream>
using std::string;

class Logger
{
public:
	/* 构造日志对象
	 * @param file 日志文件名
	 */
	Logger(const string &file);
	/* 析构函数
	 *
	 */
	virtual ~Logger();

	/* 是否真正记录？默认true
	 * @param log 需要真正记录到文件true，否则false
	 */
	void setIsLog(bool log);

	/* 记录log到文件
	 * @param type 日志类型
	 * @param ... string formart
	 */
	void log(const int& type, const string &format, ...);

	/* 记录error到文件
	 * @param ... string formart
	 */
	void error(const string &format, ...);

	/* 记录debug到文件
	 * @param ... string formart
	 */
	void debug(const string &format, ...);

	/* 记录info到文件
	 * @param ... string formart
	 */
	void info(const string &format, ...);

private:
	void log(const int& type, const string &format, va_list args);

public:
	enum LOG_TYPE
	{
		DEBUG, INFO, ERROR
	};
private:
	//日志文件名
	string _file;

	//日志的I/O流
	std::ofstream _out;

	//Log是否开启？
	bool _isLog;

	//排他锁
	pthread_mutex_t _mutex_log;
};

#endif /* LOGGER_H_ */
